Skip to main content
Feedback

Tee-ing Response Body

Once a response is streamed, it cannot be streamed again since the target would have flushed and closed the stream. Use the com.mashery.http.server.HTTPServerResponse#setBody method to set a specialized content producer that will stream to a caller and also a secondary destination.

Defining a Content Producer

public class BiContentProducer implements ContentProducer{
@Override
public void writeTo(OutputStream out) throws IOException {
BufferedInputStream in = new BufferedInputStream(origin.getInputStream());
byte[]buffer = new byte[4096];
int c;
while((c = in.read(buffer)) != -1){
out.write(buffer, 0,c); //send response bytes to caller
secondaryStream.write(buffer); //send response bytes to secondary output.
//OPtionally write to secondary stream in a separate thread.
}
out.flush();
secondaryStream.flush();
secondaryStream.close();
}
}

Setting a Content Producer to the Response

try{
BiContentProducer contentProducer = new BiContentProducer(origin, keyId);
postProcessEvent.getServerResponse().setBody(contentProducer);
}catch(IOException e){
Logger.error(AuditProcessor.class, "Error in creating respnse providr", e);
}

For more information, refer to examples/PipeResponseAdapter.java and examples/BiContentProducer.java in the Examples folder.

On this Page